package com.itheima.interceptor;


import com.itheima.thread.UserThreadLocal;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 定义一个拦截器，实现 HandlerInterceptor
 */
@Slf4j
public class UserInfoInterceptor implements HandlerInterceptor {

    // 前置拦截
    // 主要做的事：获取从gateway传递过来的用户信息
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 1. 获取请求头上的用户信息
        // TODO 这一步要根据网关那边的代码，进行对应的调整，具体看网关过滤器的 76 行
        String id = request.getHeader("id");
        if (StringUtils.isEmpty(id)) {
            log.info("请求头的id为空");
            return false;
        }
        // 2. 将id参数放到ThreadLocal里面
        // TODO id字段要根据上面的代码做调整
        UserThreadLocal.set(id);
        return true;
    }

    // 完成时拦截
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        // 固定操作，删除不需要的ThreadLocal数据
        UserThreadLocal.remove();
    }
}
